package reflect;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;

public class MethodDemo01 {
    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        ArrayList<String> list = new ArrayList<>();
        list.add("100");
        list.add("200");
        //下面的整数300不能直接存储集合
        //因为List的泛型为类型String
        //但是，泛型仅仅在编译时有效
        //list.add(300);

        //通过反射技术将300这个整数写入到list集合
        //1.获取字节码对象
        Class<?> cls = list.getClass();
        //2.获取add方法对象（类型为Method类型）
        Method method = cls.getDeclaredMethod("add", Object.class);
        //3.动态执行方法对象（可以调用Method的invoke方法）
        method.invoke(list, 300); //这里表示调用list集合的add方法，传入整数300
        //4.最后输出list集合内容
        System.out.println(list);
    }
}
